class A {
}

class NewVarArgs {
    // 使用省略号来定义一个可变参数列表，这个列表的类型是Object[]
    static void printArray(Object... args) {
        for (Object obj : args) {
            System.out.print(obj + " ");
        }
        System.out.println();
    }
}

public class VarArgs {
    // 所有类最终都继承自公共根类Object
    static void printArray(Object[] args) {
        for (Object obj : args) {
            System.out.print(obj + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        printArray(new Object[]{10, (float) 10.1, false, "A string"});
        printArray(new Object[]{new A(), new A(), new A()});

        NewVarArgs.printArray(10, (float) 10.1, false, "A string");
        NewVarArgs.printArray(new A(), new A(), new A());
        NewVarArgs.printArray();
        // 一个Integer数组（使用自动装箱创建）被转换为一个Object数组（以消除编译器警告）
        NewVarArgs.printArray((Object[]) new Integer[]{1, 2, 3, 4});
    }
}

/*
有了可变参数，就不需要再显式使用数组语法了——当使用省略号时，编译器会自动填充，得到的任然是一个数组。
 */